/**
 * 文件名：@MethodSwitch.java <br/>
 * 包名：cn.efunbox.afw.core.assist <br/>
 * 项目名：afw-core <br/>
 * @author xtwin <br/>
 */
package cn.efunbox.afw.core.assist;

import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * 类名：MethodSwitch  <br />
 *
 * 功能：方法层面上的开关
 *
 * @author xtwin <br />
 * 创建时间：2015年12月8日 下午3:25:34  <br />
 * @version 2015年12月8日
 */
public class MethodSwitch implements MethodInterceptor {
	
	// 日志记录器
	private static final Log logger = LogFactory.getLog(MethodSwitch.class);
	
	// 是否pass
	private String pass;

	/**
	 * 功能: <br/>
	 * 
	 * 重写：xtwin <br/>
	 * 
	 * @version ：2015年12月8日 下午3:27:05<br/>
	 * 
	 * @param invocation
	 * @return
	 * @throws Throwable <br/>
	 * @see org.aopalliance.intercept.MethodInterceptor#invoke(org.aopalliance.intercept.MethodInvocation)
	 */
	@Override
	public Object invoke(MethodInvocation invocation) throws Throwable {
		if (! isByPass(pass, invocation)) {
			// 执行目标方法
			return invocation.proceed();
		} else if (logger.isInfoEnabled()) {
			// 目标方法被放过，打印日志
			logger.info("the method is pass : " + invocation.getMethod());
		}
		
		return null;
	}

	/**
	 * 
	 * 功能： <br/>
	 *
	 * @author xtwin <br/>
	 * @version 2015年12月8日 下午3:28:46 <br/>
	 */
	protected boolean isByPass(String pass, MethodInvocation invocation) {
		return "Y".equals(pass);
	}

	/**
	 * @version 2015年12月8日-下午3:31:49
	 */
	public void setPass(String pass) {
		this.pass = pass;
	}
}
